package com.me.common.util.security;

import org.springframework.util.DigestUtils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * RSA 加密：公钥用来公开并加密，私钥用来保留解密，且不可互换。如何理解？
 * 我要保密，所以是加密之后发出去，任何人都可以帮我加密（公开，公钥），但是解密的能力肯定要保留（私钥）
 *
 * @author ME
 * @date 2021/8/13
 */
public class MD5Utils extends DigestUtils {

    public static void main(String[] args) throws Exception {
        String data = "这是一行需要加密的原始内容";
        System.out.println(md5DigestAsHex(data.getBytes(StandardCharsets.UTF_8)));

        File directory = new File(Paths.get("C:\\Users\\bin.yin\\Desktop\\zzsfp\\DG5461441").toUri());
        digestDirectory(directory);

        System.out.println();
        File directory2 = new File(Paths.get("C:\\Users\\bin.yin\\Desktop\\zzsfp\\DG5461441-ALI").toUri());
        digestDirectory(directory2);
    }

    /**
     * 遍历文件夹计算消息摘要
     */
    public static void digestDirectory(File parentFile) throws IOException {
        if (!parentFile.isDirectory()) {
            String md5 = md5DigestAsHex(Files.newInputStream(parentFile.toPath()));
            System.out.println("MD5: " + md5 + "  File: " + parentFile.getAbsolutePath());
        }

        File[] files = parentFile.listFiles();
        if (files == null) {
            return;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                digestDirectory(file); // 递归处理子目录
            } else {
                String md5 = md5DigestAsHex(Files.newInputStream(file.toPath()));
                System.out.println("MD5: " + md5 + "  File: " + file.getAbsolutePath());
            }
        }
    }

}
